The development and modification of computer application software entails the writing of code or software objects ("objects") using a programming paradigm, examples of which are third generation languages ("3GL"), fourth generation languages ("4GL") or Object Oriented Development ("OOD") methodologies. One of the critical limitations of these conventional methodologies is that their use in software development and modification requires the developer actually to modify code. This is a troublesome limitation not only from the point of view of the labor involved with such coding, but also with regard to the coordination of effort in the software development and testing process.
The emergence of Object Orientation as a dominant programming methodology in recent years has facilitated software development efforts by providing highly modular, natural and re-usable programming constructs. By way of background, the term "object," as used by those skilled in the art of object oriented software or programming refers to software elements in the form of data structures that can communicate or invoke one another by sending a message from one to the other. Objects that respond to the same messages are said to be of a common "class." An object "class" describes and implements all the methods that capture the behavior of "instances" (i.e., objects) of the class. The state or structure of the instances of a class are specified by a template, which may specify that an object's state includes other objects. The modularity thus introduced by OOD lends itself to a divide and conquer problem solving approach that has enabled easier debugging, permitted a higher fidelity model of real world problems or environments, and allowed the generation of reusable code. Nevertheless, the requirement to write and test code persists.
A computer "application" is a program with which a computer user interacts to perform a task, and is distinguished from system or other software that creates a functional environment in which application software is designed to run. A developer of computer application software, then, is concerned with supporting user-interaction and achieving a user's objectives.
In many application environments, and particularly where the software is developed on a custom basis, the user's needs evolve. The application software intended to meet those needs preferably also would be capable of evolving. However, the modification of application software using existing approaches--even the modular approach provided by OOD--requires writing or modifying computer code, debugging the code, and doing so with minimal disruption to the use of the application. This goal, however, has proved to be elusive.
In addition to problems associated with the need to write and integrate new code in order to develop or modify software applications, another problem with existing methods of software application development or modification is that such coding also must accommodate the processing of external events, such as user input/output (I/O) or other occurrences. However, since such user I/O or other events may vary widely between one user-environment and another (e.g., graphical user interface ("GUI") as opposed to character input), the ability to accommodate such disparate external events with existing techniques requires either (1) a time consuming process of custom software development, complete with debugging, or (2) developing a set of code with sufficient contingency-handling ability to be able to operate in the variety of then-known application environments. In either case, a massive coding and testing process is required for each local application environment, only to have either to live with the shortcomings in the software that attend evolution in the application environment, or go through an arduous re-coding and debugging process once a change in such external event conditions occurs.